package tests;

import rbm.modelado.datos.DatosPartidaImpl;
import rbm.modelado.problemas.ProblemaRBMRyPImpl;
import modelado.algoritmos.Algoritmo;
import modelado.algoritmos.AlgoritmoRamificaYPodaImpl;
import modelado.datos.DatosDiscretos;
import modelado.datos.elementos.ObjetoMochila;
import modelado.datos.elementos.ObjetoMochilaImpl;
import modelado.problemas.ProblemaRyP;
import modelado.soluciones.Solucion;

public class TestMochilaRyP extends Test {

	public static void main(String[] args) {

		// TODO
		// Utilizar el metodo crearObjetosDeLaMochila para modificar los
		// diferentes objetos de la mochila y para crear los datos a partir de
		// ellos
		DatosDiscretos d = new DatosPartidaImpl(crearObjetosDeLaMochila());
		ProblemaRyP p = new ProblemaRBMRyPImpl(d,91);
		Algoritmo alg = new AlgoritmoRamificaYPodaImpl(p);
		mostrar(d);
		alg.ejecuta();
		mostrar(alg.getSoluciones().getMejoresSoluciones());
		mostrar(alg.getMetricas().getNumDeVecesQueFiltra());
	}

	/**
	 * Funcion para establecer los objetos de la mochila.
	 * 
	 * @return la lista con los objetos de la mochila
	 */
	public static ObjetoMochila[] crearObjetosDeLaMochila() {
		ObjetoMochila e0 = new ObjetoMochilaImpl(30, 24, 2);
		ObjetoMochila e1 = new ObjetoMochilaImpl(24, 15, 2);
		ObjetoMochila e2 = new ObjetoMochilaImpl(15, 10, 2);
		ObjetoMochila e3 = new ObjetoMochilaImpl(22, 11, 3);
		ObjetoMochila e4 = new ObjetoMochilaImpl(45, 11, 4);
		ObjetoMochila e5 = new ObjetoMochilaImpl(3, 24, 4);
		ObjetoMochila e6 = new ObjetoMochilaImpl(23, 4, 5);
		ObjetoMochila e7 = new ObjetoMochilaImpl(8, 9, 5);
		ObjetoMochila e8 = new ObjetoMochilaImpl(390, 1, 50);
		ObjetoMochila e9 = new ObjetoMochilaImpl(41, 52, 14);
		ObjetoMochila elementos[] = { e0, e1, e2, e3, e4, e5, e6, e7, e8, e9 };
		return elementos;
	}

}
